#include <iostream>
#include <cstring>
using namespace std;

const int N = 1010;

int n;
int a[N];            //获取输入
int f[N];            //获取动态递推
int before[N];       //存储以i结尾的数的倒数第二个数的下标是啥
int res = 1;         //存储最长上升子序列的最后一个数字的下标，先默认是1
int ans[N], cnt = 0; //用来存储最终序列

int main()
{
    freopen("cin.txt", "r", stdin);
    memset(before, -1, sizeof before); //初始化，前面没东西就是-1
    cin >> n;
    for (int i = 1; i <= n; ++i) //这里注意，因为递推公式存在着具体意义，所以这里尽量要按照具体意义输入（虽然这次貌似从0输入也不会有边缘值）
        cin >> a[i];
    for (int i = 1; i <= n; ++i) //逐步递推
    {
        f[i] = 1;                    //先默认是1，因为如果前面都找不到比他打的，那么他就真的是1了
        for (int j = 1; j < i; ++j)  //比较前面所有序列
            if (a[i] > a[j])         //要满足严格单调递增这个目的
                if (f[j] + 1 > f[i]) //如果足够大
                {
                    f[i] = f[j] + 1;
                    before[i] = j;     //那么i的前一个数字的下标就是j了
                    if (f[i] > f[res]) //如果最长之名被抢了
                        res = i;       //那就打不过就加入
                }
    }
    cnt = f[res];
    for (int i = res, j = f[res] - 1; i != -1; i = before[i], --j)
        ans[j] = a[i];
    for (int i = 0; i < cnt; ++i)
        cout << ans[i] << " ";
    return 0;
}